package com.xsd.iterator;

import java.util.Iterator;
import java.util.List;

/**
 * @Description:
 * @Author: zhoufuzong
 * @Created: 2021-03-06 19:54:52
 * @Version: 1.1.0
 */

/**
 * 迭代器模式的注意事项和细节
 *  优点
 * 1) 提供一个统一的方法遍历对象，客户不用再考虑聚合的类型，使用一种方法就可以
 * 遍历对象了。
 * 2) 隐藏了聚合的内部结构，客户端要遍历聚合的时候只能取到迭代器，而不会知道聚
 * 合的具体组成。
 * 3) 提供了一种设计思想，就是一个类应该只有一个引起变化的原因（叫做单一责任
 * 原则）。在聚合类中，我们把迭代器分开，就是要把管理对象集合和遍历对象集
 * 合的责任分开，这样一来集合改变的话，只影响到聚合对象。而如果遍历方式改变
 * 的话，只影响到了迭代器。
 * 4) 当要展示一组相似对象，或者遍历一组相同对象时使用, 适合使用迭代器模式
 *  缺点
 * 每个聚合对象都要一个迭代器，会生成多个迭代器不好管理类
 */

public class OutPutImpl {

    // 学院集合
    List<College> collegeList;

    public OutPutImpl(List<College> collegeList) {
        this.collegeList = collegeList;
    }

    // 遍历所有的学院 ，然后调用printDepartment 输出各个学院的系
    public void printCollege(){
        Iterator<College> iterator = collegeList.iterator();
        while (iterator.hasNext()){
            College college = iterator.next();
            System.out.println("=="+college.getName()+"==");
            // 得到对应的迭代器
            printDepartment(college.createIterator());
        }
    }

    // 输出 学院输出系
    public void printDepartment(Iterator iterator){
        while (iterator.hasNext()){
            Department next =(Department) iterator.next();
            System.out.println(next.getName());
        }
    }
}
